/**
 * @brief  bsp_buzzer.c/h
 * @param  蜂鸣器的音效
 * @author 颜福兵
 * @date   2022/9/5
 * 
 **/

#include "bsp_buzzer.h"
#include "tim.h"
#include "bsp_delay.h"

/**
 * @brief PWM频率和预装载值的重载
 * @param note 频率
 * @param longtime 等待时间
 */
 
 void Note(uint32_t note, uint8_t longtime) {
	 __HAL_TIM_DISABLE(&htim16);  //关闭定时器
	 if (note) {
		 htim16.Instance->CNT = 0;
		 htim16.Instance->ARR = (300000 / note - 1) * 1u;  //修改重装载值→频率
		 htim16.Instance->CCR1 = (158000 / note - 1) * 1u;
		 __HAL_TIM_ENABLE(&htim16);
		 HAL_TIM_PWM_Start(&htim16, TIM_CHANNEL_1);
	 }
	 if (longtime) {
		 delay_ms(longtime*10);
		 __HAL_TIM_DISABLE(&htim16);  //关闭定时器
		 MX_TIM16_Init();
		 return;
	 }
 }


/**
 * @brief 蜂鸣器连续且有间隔地鸣叫
 * @param note 预装载值(频率)
 * @param wate_time (每两次鸣叫间的间隔时间)
 * @param continue_time (每叫一次的持续系统为周期时间的次数)
 */
void buzzer_bea(uint32_t note, uint16_t wate_time, uint8_t continue_time) {
   static  uint16_t cnt = 0;
	 cnt++;
	 if ((cnt % wate_time) % 2) {
		Note(note, continue_time);
	 }
}

/**
 * @brief 初始化时的叫声
 * @param  no
 */
void buzzer_init_bea(void) {
	Note(200, 20);
	Note(note_5B, 40);
	Note(200, 60);
	Note(700, 60);
}

/**
 * @brief 错误报警的声音
 * @param state 根据当前的错误类型发出不同的叫声
 */
void buzzer_warn_bea(uint32_t state) {

	__nop();
}

/**
 * @brief 整首播放《你》
 * @param  no
 */
void buzzer_Music(void)
{
	float t = 0.2;
//	Note(note_5B, 1);   //前奏
//	Note(note_G, 1);
//	Note(note_5B, 2);
//	Note(note_G, 1);
//	Note(note_5B, 2);
//	Note(note_G, 1);
//	Note(note_5D, 2);
//	Note(note_G, 1);
//	Note(note_5C, 1);
//	Note(note_5C, 1);
//	Note(note_G, 1);
//	Note(note_5B, 1);
//	Note(note_5C, 1);

//	Note(note_5B, 1);
//	Note(note_G, 1);
//	Note(note_5B, 2);
//	Note(note_G, 1);
//	Note(note_5B, 2);
//	Note(note_G, 1);
//	Note(note_5D, 2);
//	Note(note_G, 1);
//	Note(note_5C, 1);
//	Note(note_5C, 1);
//	Note(note_G, 1);
//	Note(note_5B, 1);
//	Note(note_5C, 1);

//	Note(note_5B, 1);
//	Note(note_G, 1);
//	Note(note_5B, 2);
//	Note(note_G, 1);
//	Note(note_5B, 2);
//	Note(note_G, 1);
//	Note(note_5D, 2);
//	Note(note_G, 1);
//	Note(note_5C, 1);
//	Note(note_5C, 1);
//	Note(note_G, 1);
//	Note(note_5B, 1);
//	Note(note_5C, 1);

//	Note(note_5B, 1);
//	Note(note_G, 1);
//	Note(note_5B, 2);
//	Note(note_G, 1);
//	Note(note_5B, 2);
//	Note(note_G, 1);
//	Note(note_5D, 2);
//	Note(note_G, 1);
//	Note(note_5C, 1);
//	Note(note_5C, 1);
//	Note(note_G, 1);
//	Note(note_D, 2);

//	Note(note_E, 6);
//	Note(note_D, 2);
//	Note(note_E, 2);
//	Note(note_D, 2);
//	Note(note_E, 2);
//	Note(note_G, 4);

//	Note(note_5C, 4);
//	Note(note_5B, 4);
//	Note(note_E, 4);
//	Note(note_D, 2);

//	Note(note_E, 6);
//	Note(note_D, 2);
//	Note(note_E, 2);
//	Note(note_D, 2);
//	Note(note_E, 2);
//	Note(note_5C, 8);

//	Note(note_5B, 2);
//	Note(note_5D, 4);
//	Note(note_E, 10);

//	Note(note_D, 2);
//	Note(note_E, 2);
//	Note(note_D, 2);
//	Note(note_E, 2);
//	Note(note_5B, 4);

//	Note(note_5C, 4);
//	Note(note_5B, 4);
//	Note(note_E, 4);
//	Note(note_D, 2);

//	Note(note_E, 6);
//	Note(note_D, 2);
//	Note(note_E, 2);
//	Note(note_D, 2);
//	Note(note_E, 2);
//	Note(note_5B, 4);

//	Note(note_5C, 4);
//	Note(note_5D, 10);

	//Note(0, 4);      //我一直追寻着你
	Note(note_E, 2);
	Note(0, t);
	Note(note_E, 2);
	Note(note_D, 1);
	Note(note_E, 3);
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_G, 2);

	Note(0, 2);      //你好像不远也不近
	Note(note_E, 2);
	Note(0, t);
	Note(note_E, 2);
	Note(note_D, 1);
	Note(note_E, 3);
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_G, 4);
	Note(note_C, 6);

	Note(0, 2);      //却总保持着距离
	Note(note_E, 2);
	Note(0, t);
	Note(note_E, 2);
	Note(note_D, 1);
	Note(note_E, 3);
	//	Note( note_D , 2 );
	Note(note_D, 2);
	//	Note( note_C , 1 );
	Note(note_C, 2);
	Note(note_D, 2);

	Note(0, 2);
	Note(note_E, 2);  //我一直幻想着你
	Note(0, t);
	Note(note_E, 2);
	Note(note_D, 1);
	Note(note_E, 3);
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_G, 2);

	Note(0, 2);      //在我身边在我怀里
	Note(note_E, 2);
	Note(0, t);
	Note(note_E, 2);
	Note(note_D, 1);
	Note(note_E, 3);
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_5C, 4);
	Note(note_C, 6);

	Note(0, 2);      //让我欢笑让我哭泣
	Note(note_E, 2);
	Note(0, t);
	Note(note_E, 2);
	Note(note_D, 1);
	Note(note_E, 3);
	Note(note_D, 2);
	Note(note_B, 2);
	Note(note_A, 1);
	Note(note_3G, 5);

	Note(0, 1);      //你是我灵魂的旋律
	Note(note_3G, 1);
	Note(0, t);
	Note(note_3G, 1);
	Note(0, t);
	Note(note_3G, 1);
	Note(note_G, 4);
	Note(note_E, 3);
	Note(note_D, 1);
	Note(note_C, 2);
	Note(0, t);
	Note(note_C, 4);

	Note(0, 1);
	Note(note_C, 2);      //春日的细雨
	Note(0, 1);
	Note(note_C, 2);
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_A, 6);

	Note(0, 2);          //墓碑的雏菊
	Note(note_A, 2);
	Note(note_E, 2);
	Note(note_D, 2);
	Note(note_C, 2);
	Note(note_D, 6);
	Note(0, 2);

	Note(note_E, 4);      //我从来不会计算代价
	Note(note_F, 4);
	Note(note_G, 6);
	Note(note_E, 2);
	Note(note_G, 2);
	Note(note_E, 1);
	Note(note_G, 3);
	Note(note_5B, 4);
	Note(note_5C, 6);

	Note(note_C, 2);     //为了你可以纵身无底悬崖
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_G, 4);
	Note(note_5A, 4);
	Note(note_G, 1);
	Note(note_5A, 3);
	Note(note_G, 1);
	Note(0, 1);
	Note(note_G, 3);
	Note(0, 1);
	Note(note_G, 4);
	Note(note_D, 8);

	Note(note_E, 4);     //像条狗更像一个笑话
	Note(note_F, 4);
	Note(note_G, 6);
	Note(note_E, 2);
	Note(note_G, 2);
	Note(note_E, 1);
	Note(note_G, 3);
	Note(note_5B, 4);
	Note(note_5C, 6);

	Note(note_C, 2);     //也许我很傻但我不会怕
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_5B, 4);
	Note(note_5A, 6);
	Note(0, t);
	Note(note_5A, 2);
	Note(note_G, 1);
	Note(note_5A, 3);
	Note(note_5C, 4);
	Note(note_5D, 6);

	Note(0, 2);
	Note(note_G, 2);   //我愿意呀
	Note(note_5C, 2);
	Note(note_5B, 1);
	Note(note_5C, 12);

	Note(0, 4);

	Note(0, 2);      //人们都追寻着你
	Note(note_E, 2);
	Note(0, t);
	Note(note_E, 2);
	Note(note_D, 1);
	Note(note_E, 3);
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_G, 2);

	Note(0, 2);      //都曾把你当作唯一
	Note(note_E, 2);
	Note(0, t);
	Note(note_E, 2);
	Note(note_D, 1);
	Note(note_E, 3);
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_G, 4);
	Note(note_C, 6);

	//	Note( 0 , 4 );

	Note(0, 2);      //最后却无能为力
	Note(note_E, 2);
	Note(0, t);
	Note(note_E, 2);
	Note(note_D, 1);
	Note(note_E, 3);
	//	Note( note_D , 2 );
	Note(note_D, 2);
	//	Note( note_C , 1 );
	Note(note_C, 2);
	Note(note_D, 2);

	Note(0, 2);      //人们都幻想着你
	Note(note_E, 2);
	Note(note_E, 2);
	Note(note_D, 1);
	Note(note_E, 3);
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_G, 2);

	Note(0, 2);      //幻想你依偎他怀里
	Note(note_E, 2);
	Note(0, t);
	Note(note_E, 2);
	Note(note_D, 1);
	Note(note_E, 3);
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_5C, 4);
	Note(note_C, 6);

	//	Note( 0 , 4 );

	Note(0, 2);      //一朝拥有一劳永逸
	Note(note_E, 2);
	Note(note_E, 2);
	Note(note_D, 1);
	Note(note_E, 3);
	Note(note_D, 2);
	Note(note_B, 2);
	Note(note_A, 1);
	Note(note_3G, 5);

	Note(0, 1);      //可是你不为谁守候
	Note(note_3G, 1);
	Note(0, t);
	Note(note_3G, 1);
	Note(0, t);
	Note(note_3G, 1);
	Note(note_G, 4);
	Note(note_E, 3);
	Note(note_D, 1);
	Note(note_C, 2);
	Note(0, t);
	Note(note_C, 4);

	Note(0, 1);
	Note(note_C, 2);      //不承诺永久
	Note(0, t);
	Note(note_C, 2);
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_A, 6);

	Note(0, 2);          //不轻易停留
	Note(note_A, 2);
	Note(note_E, 2);
	Note(note_D, 2);
	Note(note_C, 2);
	Note(note_D, 10);

	Note(0, 4);
	Note(note_E, 4);      //我知道只有不断出发
	Note(note_F, 4);
	Note(note_G, 6);
	Note(note_E, 2);
	Note(note_G, 2);
	Note(note_E, 1);
	Note(note_G, 3);
	Note(note_5B, 4);
	Note(note_5C, 6);

	Note(note_C, 2);     //才能够紧随你纵情的步伐
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_G, 4);
	Note(note_5A, 5);
	Note(note_G, 1);
	Note(note_5A, 2);
	Note(note_G, 1);
	Note(0, t);
	Note(note_G, 3);
	Note(0, 1);
	Note(note_D, 2);
	Note(0, 1);
	Note(note_D, 8);

	Note(note_E, 4);     //就算是海角至天涯
	Note(note_F, 4);
	Note(note_G, 4);
	Note(0, 5);
	Note(note_G, 2);
	Note(note_E, 1);
	Note(note_G, 3);
	Note(note_5D, 4);
	Note(note_5C, 6);

	Note(note_C, 2);    //青丝变白发
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_5C, 4);
	Note(note_5A, 5);

	Note(note_G, 1);     //只等着你回答
	Note(note_5A, 2);
	Note(note_G, 1);
	Note(note_5A, 3);
	Note(note_5C, 4);
	Note(note_5D, 6);

	Note(0, 2);
	Note(note_D, 2);   //我愿意呀
	Note(note_E, 2);
	Note(note_D, 1);
	Note(note_C, 12);

	//间奏略

	Note(0, 4);
	Note(note_E, 4);      //我从来不会计算代价
	Note(note_F, 4);
	Note(note_G, 6);
	Note(note_E, 2);
	Note(note_G, 2);
	Note(note_E, 1);
	Note(note_G, 3);
	Note(note_5B, 4);
	Note(note_5C, 6);

	Note(note_C, 2);     //为了你可以纵身无底悬崖
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_G, 4);
	Note(note_5A, 5);
	Note(note_G, 1);
	Note(note_5A, 2);
	Note(note_G, 1);
	Note(0, 1);
	Note(note_G, 3);
	Note(0, 1);
	Note(note_G, 4);
	Note(note_D, 8);

	Note(note_E, 4);     //像条狗更像一个笑话
	Note(note_F, 4);
	Note(note_G, 6);
	Note(note_E, 2);
	Note(note_G, 2);
	Note(note_E, 1);
	Note(note_G, 3);
	Note(note_5B, 4);
	Note(note_5C, 6);

	Note(note_C, 2);     //也许我很傻但我不会怕
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_5C, 4);
	Note(note_5A, 6);
	Note(0, t);
	Note(note_5A, 2);
	Note(note_G, 1);
	Note(note_5A, 3);
	Note(note_5C, 4);
	Note(note_5D, 6);

	Note(note_E, 4);      //我知道只有不断出发
	Note(note_F, 4);
	Note(note_G, 6);
	Note(note_E, 2);
	Note(note_G, 2);
	Note(note_E, 1);
	Note(note_G, 3);
	Note(note_5B, 4);
	Note(note_5C, 6);

	Note(note_C, 2);     //才能够紧随你纵情的步伐
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_G, 4);
	Note(note_5A, 5);
	Note(note_G, 1);
	Note(note_5A, 2);
	Note(note_G, 1);
	Note(0, 1);
	Note(note_G, 3);
	Note(0, 1);
	Note(note_G, 4);
	//	Note( note_D , 2 );
	//	Note( 0 , 0.1 );
	Note(note_D, 8);

	Note(note_E, 4);     //就算是海角至天涯
	Note(note_F, 4);
	Note(note_G, 4);
	Note(0, 1);
	Note(note_G, 2);
	Note(note_E, 1);
	Note(note_G, 3);
	Note(note_5D, 4);
	Note(note_5C, 6);

	Note(note_C, 2);    //青丝变白发
	Note(note_D, 2);
	Note(note_E, 2);
	Note(note_5C, 4);
	Note(note_5A, 5);

	Note(note_G, 1);     //只等着你回答
	Note(note_5A, 2);
	Note(note_G, 1);
	Note(note_5A, 3);
	Note(note_5C, 4);
	Note(note_5D, 6);

	Note(0, 2);
	Note(note_G, 2);   //我愿意呀
	Note(note_5C, 2);
	Note(note_5B, 1);
	Note(note_5C, 12);

	//尾
	Note(0, 4);
	Note(note_E, 4);
	Note(note_D, 4);
	Note(note_C, 4);
	Note(note_G, 4);
	Note(note_C, 4);
	Note(note_D, 4);
	Note(note_E, 4);
	Note(note_F, 4);
	Note(note_G, 4);
	Note(note_F, 4);

	Note(note_E, 4);
	Note(note_D, 4);
	Note(note_C, 4);
	Note(note_D, 4);
	Note(note_E, 4);
	Note(note_F, 4);
	Note(note_E, 4);
	Note(note_D, 4);
	Note(note_C, 4);
	Note(note_G, 4);

	Note(note_E, 4);
	Note(note_D, 4);
	Note(note_E, 4);
	Note(note_F, 4);
	Note(note_G, 4);
	Note(note_F, 4);
	Note(note_E, 4);
	Note(note_D, 4);

	Note(note_E, 4);
	Note(note_D, 4);
	Note(note_E, 4);
	Note(note_F, 4);

	Note(note_E, 4);
	Note(note_D, 4);
	Note(note_C, 4);
	Note(note_G, 4);
	Note(note_C, 4);
	Note(note_D, 4);
	Note(note_E, 4);
	Note(note_F, 4);
	Note(note_G, 4);
	Note(note_F, 4);
	Note(note_E, 4);
	Note(note_D, 4);
}

















